package lambda;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * JDK8之后java推出了一个新特性:lambda表达式
 *
 * lambda表达式可以用更简洁的语法创建匿名内部类.
 * 语法:
 * (参数列表)->{
 *     方法体
 * }
 * 需要注意:只要当实现的接口中仅有一个抽象方法时,才可以使用lambda表达式
 *
 * 使用lambda表达式可以更突出方法的实现逻辑,而不再赘述实现接口的语法上
 */
public class LambdaDemo {
    public static void main(String[] args) {
        //使用匿名内部类形式创建Comparator
        Comparator<String> a=new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return 0;
            }
        };

        //lambda表达式写法
        Comparator<String> b= (String o1, String o2)-> {
                return o1.length()-o1.length();
        };


        //bambda表达式中,参数列表中的参数类型可以忽略不写
        Comparator<String> c= ( o1,  o2)-> {
            return o1.length()-o1.length();
        };


        /*
        如果bambda表达式只有一句代码,那么方法体的"{}"可以忽略不写,同时如果该句代码含有return关键字,那么也要一同忽略
         */
        Comparator<String> d= ( o1,  o2)->o1.length()-o1.length();

        List<String> list1=new ArrayList<>();
        list1.add("李说水水水水水水水水");
        list1.add("哈哈哈哈");
        list1.add("我我我我我我我");
        list1.add("蔡徐坤");
        /*
            JDK8之后List集合自身提供了sort方法,可以根据给定的比较器对自身元素进行比较后排序
            并且Collections中的sort方法逻辑也变为了调用list的sort实现了.
         */
        list1.sort(((o1, o2) -> o1.length()-o2.length()));
        System.out.println(list1);
    }
}
